package main

import "fmt"

func main() {
	//main1()
	main2()
}
func main2() {
	a := calc_huidiao(1, 2, add)
	fmt.Println(a)

	a = calc_huidiao(1, 2, minus)
	fmt.Println(a)
	a = calc_huidiao(1, 2, cala_myfun1)
	fmt.Println(a)
}

func calc_huidiao(a, b int, func_cal cala_Run) (result int) {
	fmt.Println("进入回调函数")
	result = func_cal(a, b)
	return
}
func cala_myfun1(a, b int) int {
	fmt.Println("回调函数实现 myfunc1")
	return a * b
}
func main1() {
	var myfunc1 myfunc
	myfunc1 = add;
	var re = myfunc1(1, 2)
	fmt.Println(re)

	myfunc1 = minus;
	re = myfunc1(1, 2)
	fmt.Println(re)
}

//////////////////////
//函数也是一种类型:多态--->回调函数,有一个函数至少有一个参数是函数数据类型
type myfunc func(a, b int) int
type cala_Run func(a, b int) int


func add(a, b int) int {
	fmt.Println("进入回调函数 回调函数实现add")
	return a + b
}
func minus(a, b int) int {
	fmt.Println("进入回调函数 回调函数实现minus")
	return a - b
}

//////////////////////
